package com.atguigu.guli.service.edu.controller.admin;


import com.atguigu.guli.service.base.result.R;
import com.atguigu.guli.service.edu.entity.Teacher;
import com.atguigu.guli.service.edu.entity.query.TeacherQuery;
import com.atguigu.guli.service.edu.feign.OssFeignClient;
import com.atguigu.guli.service.edu.service.TeacherService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 讲师 前端控制器
 * </p>
 *
 * @author atguigu
 * @since 2021-06-27
 */
    @Slf4j
@Api(tags = "讲师管理模块")
@RestController
@RequestMapping("/admin/edu/teacher")
@CrossOrigin//设置允许跨域
public class AdminTeacherController {
    @Autowired
    TeacherService teacherService;

    //1、查询所有讲师
    @ApiOperation(value = "查询所有讲师")
    @GetMapping("/list")
    public R listAll(){
        log.debug("{}级别的日志,现在是：{}" , "debug" , new Date());
        log.info("{}级别的日志,现在是：{}" , "info" , new Date());
        log.warn("{}级别的日志,现在是：{}" , "warn" , new Date());
        log.error("{}级别的日志,现在是：{}" , "error" , new Date()); //生产环境使用
        List<Teacher> list = teacherService.list();
        return R.ok().data("items",list);
    }

    @Autowired
    OssFeignClient ossFeignClient;
    //2、删除指定id讲师
    @ApiOperation("删除指定id讲师")
    @DeleteMapping("/delete/{id}")
//    @Transactional
    public R deleteById(@ApiParam(name = "id",value = "用户id", defaultValue = "2",required = true) @PathVariable("id") String id){
        Teacher teacher = teacherService.getById(id);//在删除之前先查询讲师数据
        boolean b = teacherService.removeById(id);
        if(b){
            if(!StringUtils.isEmpty(teacher.getAvatar())){
                //如果讲师有头像地址，删除讲师头像
                R ossR = ossFeignClient.deleteFile(teacher.getAvatar(), "avatar");
                log.error( ossR.toString() );
                //判断删除是否成功，如果不成功，抛出异常 认为头像删除失败
//                if(ossR.getCode()!=20000){
//                    throw new RuntimeException("远程删除头像失败");
//                }
            }

            return R.ok().message("删除成功");
        }else {
            return R.error().message("讲师不存在");
        }
    }
    //3、新增
    @ApiOperation("新增讲师")
    @PostMapping("/save")// 前端post方式提交表单数据，一般使用 请求体中 使用对象json的方式提交数据
    public R saveTeacher(@ApiParam("新增讲师对象") @RequestBody Teacher teacher){
        teacherService.save(teacher);
        return R.ok();
    }
    //4、更新
    @ApiOperation("更新讲师")
    @PutMapping("/update")// 前端post方式提交表单数据，一般使用 请求体中 使用对象json的方式提交数据
    public R updateTeacher(@ApiParam("新增讲师对象") @RequestBody Teacher teacher){
        System.out.println(teacher);
        teacherService.updateById(teacher);
        return R.ok();
    }
    //5、查询指定id的讲师
    @ApiOperation(value = "查询指定讲师")
    @GetMapping("/get/{id}")
    public R getById(@PathVariable("id") String id){
        Teacher teacher = teacherService.getById(id);
        return R.ok().data("item" , teacher);
    }

    //6、分页查询讲师集合    pageNum  pageSize
    @ApiOperation(value = "分页查询讲师")
    @GetMapping("/list/{pageNum}/{pageSize}")
    public R listPage(@ApiParam("页码") @PathVariable("pageNum") Integer pageNum ,
                      @ApiParam("查询记录条数")  @PathVariable("pageSize") Integer pageSize,
                    //@RequestBody 表示获取请求体json转化为对象
                      //请求参数 使用pojo或者requestParam方式获取
                      TeacherQuery query
    ){
        // 业务bean
        Page<Teacher> page = new Page<>(pageNum , pageSize);
        page = teacherService.getPageByCondition(page, query);
        return R.ok().data("page" , page);
    }
    //7、批量删除讲师 [  id  [1,2,3]]
    @DeleteMapping("/batchDel")
    /*
        前端提交参数：
            1、url?ids=1,2,3
                后端：
                    String[] ids      得到一个String类型的数组，1 2 3作为数组的元素
                    @RequestParam("ids")List<String> ids   将ids的值 1 2 3存到idslist集合中
           2、url
                请求体提交的json数组： [1,2,3]
                后端：
                    @RequestBody List<String> ids
     */


//    public R batchDel(String[] ids){ // springmvc接受请求参数时，如果以ids=1,2,3的形式提交，它会自动以,进行分割 将每个元素存到数组中
//    public R batchDel(@RequestParam("ids")List<String> ids){ // springmvc接受请求参数时，如果以ids=1,2,3的形式提交，它会自动以,进行分割 将每个元素存到数组中
    public R batchDel(@RequestBody List<String> ids){ // springmvc接受请求参数时，如果以ids=1,2,3的形式提交，它会自动以,进行分割 将每个元素存到数组中
        //System.out.println(ids); // /admin/edu/teacher/batchDel?ids=1,2,3
        teacherService.removeByIds(ids);
        return R.ok();
    }
}

